import {create} from 'zustand';
import {immer} from 'zustand/middleware/immer'; // 中间件，用于扩展功能，比如持久化存储，数据缓存等，这里暂时不使用，后续可以自行扩展
import {persist,createJSONStorage} from 'zustand/middleware'; // 持久化存储，用于将数据存储到本地，下次打开页面时可以读取之前存储的数据，这里暂时不使用，后续可以自行扩展
import {useShallow} from 'zustand/shallow';

const state = immer(persist((set, get) => {
    return  {
        userName: 'react',
        version: '18.4.2',
        age: 18,
        obj: {
            a:1,
            b:2,
            c:3,
            d:4
        },
        setAge() {
            set(state => {state.age += 1})
        },
        setObjA() {
            set(state => {state.obj.a += 1})
        }
    }
},{
    name:'loginStore', // 名称，用于存储到本地的key
    storage: createJSONStorage(() => sessionStorage),  // 存储到sessionStorage中，关闭页面后数据会丢失
    version: 1, // 版本号，用于升级存储的数据，这里暂时不使用，后续可以自行扩展
    // partialize:(state) => ({a:1,b:2,c:3}) // 部分化，用于存储到本地的数据，这里暂时不使用，后续可以自行扩展    }
}
));

const useLoginStore = create(state);

export const setAge = () => {
    useLoginStore.setState(state => {state.age ++});
}

export const setObjA = () => {
    useLoginStore.setState(state => {state.obj.a ++});
}

//console.dir(useLoginStore); //执行完毕create返回一个对象
/**
 * getInitialState  获取初始化状态
 * setState     设置状态
 * getState     获取状态
 * persist      持久化存储
 *          - clearStorage      
 *          - getOptions           
 * subscribe    
 */


export default useLoginStore;